// 基于 axios 封装的请求模块
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 新建一个新的axios实例 可以根据不同的需求，封装不同的请求—————灵活
const ajax = axios.create({
  baseURL: 'http://toutiao.itheima.net', // 统一配置基地址
  headers: {
    Authorization: 'Bearer ' + store.state.token
  }
})
// 添加响应拦截器  可以对返回的数据  或者 错误 进行统一处理
ajax.interceptors.response.use(function (res) { // http 状态2xx 和 3xx 处理
  return res
}, function (err) { // http 状态码 4xx  5xx 处理
  // 401 典型的 token 过期 的错误
  // token过期解决方法
  // 1. 重新登陆
  // 2. token 续签（配合refresh_token解决）
  // console.log(router)
  if (err.response.status === 401) {
    // 清空vuex 中的token
    store.commit('setToken', '')
    // 跳转到登录页面
    router.replace({
      path: '/login?from=' + router.currentRoute.path
    })
  }
  return Promise.reject(err)
})
// 添加请求拦截器
ajax.interceptors.request.use(config => {
  // 对 token 做统一处理，  如果 vuex 中有token ，则在请求头中 通过Authoritarian携带
  // if (store.state.token) {
  //   config.headers.Authorization=`Bearer ${store.state.token}`
  // }
  return config
}, err => {
  return Promise.reject(err)
})
// 导出自定义函数
export default ajax
